Ingress, IngressClass, Ingress Controlller 란?
이 글에서는 쿠버네티스의 Ingress 과 Ingress Controller 를 소개합니다.
목표
- Ingress, IngressClass, Ingress Controller 이해하기
소개
Ingress 는 Cluster의 Service에 대해 외부 접근(일반적으로 HTTP)을 관리하는 API 객체입니다.
Ingress 는 로드 밸런싱, SSL 종료, 호스트 이름 기반 가상 호스팅을 제공할 수 있습니다.
용어
- Node: 쿠버네티스 워커 머신입니다.
- Cluster: 쿠버네티스에서 관리하는 컨테이너화된 앱을 실행하는 노드 집합입니다.
- Edge router: Cluster에 대한 방화벽 정책을 적용하는 라우터입니다.
클라우드 제공업체에서 관리하는 게이트웨이 또는 물리적 하드웨어일 수 있습니다. - Cluster network: 쿠버네티스 네트워킹 모델 에 따라 Cluster 내에서 통신을 가능하게 하는 논리적 또는 물리적 링크 집합입니다
- Service: Label Selector 를 사용하여 Pod 집합을 식별하는 쿠버네티스 서비스입니다.
달리 언급되지 않는 한, Service 는 Cluster network 내에서만 라우팅 가능한 가상 IP를 갖는 것으로 가정합니다.
Ingress 와 관련된 리소스는 Ingress, Ingress Controller, IngressClass 가 있습니다.
각 리소스에 대해 간단히 소개하겠습니다.
Ingress
Ingress 는 Cluster 외부에서 Cluster 내 Service 로의 HTTP 및 HTTPS 경로를 노출합니다.
Ingress 리소스에 정의된 규칙에 의해 트래픽 라우팅이 제어됩니다.
다음은 Ingress 가 모든 트래픽을 하나의 Service 로 전송하는 간단한 예입니다:
Ingress controller
Ingress 리소스가 작동하려면, Cluster는 Ingress Controller 가 반드시 필요합니다.
Ingress Controller 는 쿠버네티스 트래픽 라우팅을 추상화하여 쿠버네티스 서비스와 외부 서비스 간의 가교 역할을 합니다.
즉, 쿠버네티스에서 Ingress 를 구현한 로드 밸런서입니다.
kube-controller-manager
바이너리의 일부로 실행되는 다른 유형의 controller 와 달리, Ingress Controller 는 Cluster와 함께 자동으로 시작되지 않습니다.
쿠버네티스는 프로젝트로 AWS, GCE 및 nginx Ingress controller 를 지원하고 유지 관리합니다.
3rd 파티 프로젝트들은 추가 Controller 페이지를 참고하세요.
한 Cluster에 여러 개의 Ingress controller 를 배포할 수 있습니다.
이 경우, Ingress class 리소스의 .metadata.name
을 Ingress 객체의 ingressClassName
필드에 지정하면 됩니다.(IngressSpec v1 참조).
Ingress 에 대해 IngressClass 를 지정하지 않고 Cluster에 정확히 하나의 IngressClass 가 기본으로 표시되어 있는 경우, 쿠버네티스는 Cluster의 기본 IngressClass 를 Ingress 에 적용합니다.
Ingress class
Ingress 리소스는 IngressClass 객체를 사용하여 특정 Ingress Controller 인스턴스를 지정할 수 있습니다.
이는 동일한 클러스터에서 여러 Ingress Controller 들을 실행할 때 유용합니다.
이 작업은 IngressClassName
필드 또는 ingress.class
annotation 을 사용하여 수행할 수 있습니다.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: external-lb
spec:
controller: example.com/ingress-controller
parameters:
apiGroup: k8s.example.com
kind: IngressParameters
name: external-lb
IngressClass 의 .spec.parameters
필드를 사용하면 해당 IngressClass 와 관련된 구성을 제공하는 다른 리소스를 참조할 수 있습니다.
사용 가능한 파라미터의 상세한 타입은 IngressClass 의 .spec.parameters
필드에 명시한 Ingress Controller의 종류에 따라 다릅니다.
결론
다음 그림은 Exposing Kubernetes Applications, Part 3: NGINX Ingress Controller에 나온 NGINX Ingress Controller 의 구현에 대한 아키텍쳐입니다:
Cluster 내부의 Service(주로 HTTP 및 HTTPS) 를 외부에 노출하기 위해,
Ingress 트래픽 라우팅을 제어하기 위한 규칙을 정의하고,
Ingress controller 가 로드 밸런서 역할을 합니다.
한 Cluster 에 여러 Ingress controller 를 사용하는 경우,
Ingress class 로 각 Ingress controller 에 라우팅 룰이 정의된 Ingress 를 지정할 수 있습니다.
이 글에서는 쿠버네티스의 Ingress, IngressClass 그리고 Ingress Controller 를 소개했습니다. 😎
댓글남기기